//#include <stdio.h>
//int main()
//{
//	float arr[10],found;
//	int locate,i;
//	for(i=0;i<10;i++)
//	{
//		scanf("%f",&arr[i]);
//	}
//	scanf("%f",&found);
//	for(i=0;i<10;i++)
//	{
//		if(arr[i]==found)
//		{
//			locate=i;
//			break;
//		}
//	}
//	if(i==10)
//		printf("没有这个数");
//	else
//		printf("该数位置为%d",locate);
//	return 0;
//}

//#include <stdio.h>
//#include <math.h>
//int main()
//{
//	short i,Flag=0;
//	double array[8]={2.6,3.1,4.7,5.4,6.0,6.7,9.4,16.8};
//	double x;
//	printf("输入待查询的浮点数x:");
//	scanf("%lf",&x);
//	for(i=0;i<8;i++)
//	{
//		if(fabs(array[i]-x)<1e-6)
//		{
//			printf("找到这个数，在第%d个位置",i+1);
//			Flag=1;
//		}
//	}
//	if(Flag==0)
//	{
//		printf("没有这个数\n");
//	}
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int i,j,arr[3][3],max,row,line;
//	for(i=0;i<3;i++)
//	{
//		for(j=0;j<3;j++)
//		{
//			scanf("%d",&arr[i][j]);
//		}
//	}
//	max=arr[0][0];
//	for(i=0;i<3;i++)
//	{
//		for(j=0;j<3;j++)
//		{
//			if(arr[i][j]>max)
//			{
//				row=i;
//				line=j;
//			}
//		}
//	}
//	printf("%d %d",row+1,line+1);
//	return 0;
//}

//#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>
//int main()
//{
//	srand((unsigned)time(NULL));
//	int arr[10],i=0,j=0,tmp;
//	for(i=0;i<10;i++)
//	{
//		while(1)
//		{
//			tmp=10*rand()/RAND_MAX+1;	
//			for(j=0;j<i;j++)
//			{
//				if(tmp==arr[j])
//					break;
//			}
//			if(j==i)
//			{
//				arr[i]=tmp;
//				break;
//			}
//			
//		}
//		printf("%d,",arr[i]);
//		
//	}
//	printf("\b \n");
//	return 0;
//}

//#include <stdio.h>
//#include <math.h>
//int main()
//{
//	int i,root,a,b,c,arr[100]={0},k=0;
//	for(i=100;i<=999;i++)
//	{
//		root=sqrt(1.0*i);
//		a=i%10;
//		b=i/10%10;
//		c=i/100;
//		if((pow(root,2.0)==i)&&(a==b||a==c||b==c))
//			arr[k++]=i;
//	}
//	for(i=k-1;i>=0;i--)
//	{
//		printf("%d\n",arr[i]);
//	}
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int arr[1000]={0};
//	int i=1,num,k=1,j=1,tmp;
//	scanf("%d",&num);
//	for(i=1;i<=num;i++)
//	{
//		for(j=0;j<k;j++)
//		{
//			if(i==1)
//				arr[j]=i;
//			else
//				arr[j]=arr[j]*i;
//			if(arr[j]>=10)
//			{
//				tmp=arr[j]/10;
//				arr[j]=arr[j]%10;
//				arr[j+1]+=tmp;
//				k++;
//			}
//		}
//	}
//	for(i=k;i>0;i--)
//	printf("%d",arr[i]);
//	
//	return 0;
//}


#include <stdio.h>

int main()
{
	int r[1000] = {1}; // 存储大数的每一位
	int i, j;
	int k = 0, l = 0; // k 用于进位，l 用于记录当前大数的位数
	
	for (i = 1; i <= 40; i++) // 计算 1! 到 40!
	{
		k = 0; // 重置进位
		for (j = 0; j <= l; j++) // 从最低位开始乘以 i
		{
			r[j] = r[j] * i + k; // 当前位乘以 i 加上进位
			k = r[j] / 10; // 计算新的进位
			r[j] = r[j] % 10; // 当前位取模 10
		}
		while (k) // 处理剩余的进位
		{
			l++; // 更新大数的位数
			r[j++] = k % 10; // 存储进位的个位数
			k = k / 10; // 更新进位
		}
		printf("%d!=", i); // 打印阶乘结果
		for (j = l; j >= 0; j--) // 从最高位开始打印
		{
			printf("%d", r[j]);
		}
		printf("\n");
	}
	return 0;
}
